#ifndef TREEFILE_H
#define TREEFILE_H

#include <string>
#include <fstream>
#include "MetaBloqueBPlus.h"


class TreeFile {
	private:
		size_t _tamBloques;

		// El archivo que contiene el arbol B+
		std::fstream _archArbol;

		// Una clase encargada de parsear y guardar la informacion
		// de los parametros del arbol
		MetaBloqueBPlus _metaData;
	public:
		TreeFile(std::string nomArch, size_t tamBloques, bool crear=true);
		~TreeFile();

		/* Carga el bloque de bytes "refPosBloque" desde el archivo a la memoria,
		 * debe tener tamaño suficiente para el bloque de datos
		 * */
		void loadBloque(unsigned long int refPosBloque, char* outData);

		/* Guarda los datos apuntados por "inData" en el bloque "refPosBloque"
		 * */
		void storeBloque(unsigned long int refPosBloque, char* inData);

		// Borra el bloque referenciado del disco
		void deleteBloque(unsigned long int refPosBloque);

		// Crea un nuevo bloque en disco, devuelve la referencia al mismo
		unsigned long int getNewBloque();

		// La cantidad de bloques de datos que forman el archivo
		unsigned long int getCantBloques();

		// El tamaño de los bloques utilizados
		size_t getSizeBloque();

		// Devuelve una referencia al bloque que contiene el nodo raiz
		unsigned long int getRefBloqueRaiz();

		// Devuelve una referencia a la hoja que esta mas a la izquierda
		unsigned long int getRefHoja();
};

#endif
